window.workspace = function(){
	var response  = <?#$respons?>;
	var formPanel, treePanel, store, grid, win, access, tlock;
	var sid = {'account':Ext.id(), 'status':Ext.id(), 'sdate':Ext.id(), 'edate':Ext.id(), 'orgid':Ext.id()};
	var sm  = new Ext.grid.CheckboxSelectionModel();
	function userForm(user) {
		if(!win) {
			treePanel = new Ext.tree.TreePanel({
		        title			: '个性权限设置',
		        width			: 180,
		        region			: 'east',
		        split       	: true,
				collapseMode	: 'mini',
				bodyBorder  	: false,
				animCollapse	: true,
		        useArrows		: true,
		        autoScroll		: true,
		        animate			: true,
		        containerScroll	: true,
		        border			: false,
		        rootVisible		: false,
		        frame			: true,
		        listeners 		: {
					'checkchange': function(node, ischecked){
						if(tlock) {
							return;
						}
						tlock = node.id;
						var pnode, isbk=false;
						pnode = node.parentNode;
						while(pnode){
							if(!ischecked && node.leaf) {
								break;
							} 
							if(!ischecked) {
								for(var i = 0; i < pnode.childNodes.length; i++) {
									if(pnode.childNodes[i].attributes.checked) {
										isbk = true;
										break;
									}
								}
								if(isbk) {
									break;
								}
							}
							pnode.getUI().toggleCheck(ischecked);
							pnode.attributes.checked=ischecked;
							pnode = pnode.parentNode;
						};
						node.cascade(function(){
							this.getUI().toggleCheck(ischecked);
							this.attributes.checked=ischecked;
						});
						tlock = false;
					}
				},
		        loader 			: {
		        	dataUrl		: '/admin/menu/dotree.html'
		        },
		        root			: {
					nodeType	: 'async'
		        }
		    });
		    treePanel.getRootNode().expand(true);
		    formPanel = new Ext.form.FormPanel({
				title		: '基本资料设置',
				frame		: true,
				width		: 520,
				region		: 'center',
		        labelWidth	: 100,
		        fileUpload  : true,
		        labelAlign  : 'right',
		    	defaults	: {
		    		xtype	: 'textfield'
		    	},
		    	items		: [{
		            xtype		: 'hidden',
		            name		: 'id',
		            value		: 0
		    	},{
		            xtype		: 'textfield',
		            fieldLabel	: '用户名',
		            name		: 'account',
		            regex		: /^[\w]{4,}$/,
		            regexText	: '用户名只能为数组字母以及下划线组成',
		            allowBlank	: false
		    	},{
					xtype		: 'textfield',
					inputType 	: 'file', 
			 		fieldLabel	: '默认头像',
					name		: 'avtar'
				},{
		            xtype		: 'textfield',
		            fieldLabel	: '真实姓名',
		            name		: 'nickname',
		            allowBlank	: false
		    	},{
		            xtype		: 'textfield',
		            fieldLabel	: '密码',
		            name		: 'loginpw',
		            inputType	: 'password',
		            regex		: /^[^\s]{6,}$/,
		            regexText	: '密码至少含6个字符'
		    	},{
		            xtype		: 'textfield',
		            fieldLabel	: '联系邮箱',
		            name		: 'email',
		            vtype		: 'email',
		            allowBlank	: false
		    	},{
		            xtype		: 'textfield',
		            fieldLabel	: '手机号码',
		            name		: 'mobile',
		            regex		: /^1[34568][0-9]{9}$/,
		            regexText   : '手机号码格式错误！', 
		            allowBlank	: false
		    	},{
		            xtype		: 'datefield',
		            fieldLabel	: '过期时间',
		            width		: 120,
		            format      : 'Y-m-d',
		            name		: 'expire',
		            allowBlank	: false
		    	},{
		    		xtype		: 'combo',
		            store		: new Ext.data.ArrayStore({
			        	fields  : ['id','name'],
			        	data    : main.cv2Array(response.sex)
			    	}),
					displayField	: 'name',
					valueField		: 'id',
					mode			: 'local',
					emptyText		: '请选择',
		            fieldLabel		: '性别',
		            editable		: false,
		            typeAhead		: true,
		            forceSelection	: true,
		            width			: 100,
		            allowBlank		: false,
					triggerAction	: 'all',
					hiddenName		: 'sex',
		            name			: 'sex'
		        },{
		    		xtype		: 'combo',
		            store		: new Ext.data.ArrayStore({
			        	fields  : ['id','name'],
			        	data    : main.cv2Array(response.status)
			    	}),
					displayField	: 'name',
					valueField		: 'id',
					mode			: 'local',
					emptyText		: '请选择',
		            fieldLabel		: '状态',
		            editable		: false,
		            typeAhead		: true,
		            forceSelection	: true,
		            width			: 100,
		            allowBlank		: false,
					triggerAction	: 'all',
					hiddenName		: 'status',
		            name			: 'status'
		        },{
		    		xtype		: 'combo',
		            store		: new Ext.data.ArrayStore({
			        	fields  : ['id','name'],
			        	data    : main.cv2Array(response.isdup)
			    	}),
					displayField	: 'name',
					valueField		: 'id',
					mode			: 'local',
					emptyText		: '请选择',
		            fieldLabel		: '是否多终端登录',
		            typeAhead		: true,
		            forceSelection	: true,
		            width			: 100,
					triggerAction	: 'all',
					allowBlank		: false,
					hiddenName		: 'isdup',
		            name			: 'isdup'
		        },{
                    xtype		: 'combotree',
                    fieldLabel	: '所在部门',
                    hiddenName	: 'orgid',
		            name		: 'orgid',
                    emptyText	: '请选择',
                    tree		: new Ext.tree.TreePanel({  
                		useArrows		: true,
                		autoScroll		: true,
                		animate			: true,
                		containerScroll	: true,
                		border			: false,
                		rootVisible		: false,
                		loader 			: {
                			dataUrl		: '/admin/org/dotree.html'
                		},
                		root			: {
                			nodeType	: 'async'
                		}
                	}), 
            		listWidth	: 220,
                	width 		: 140
				},{
		    		xtype		: 'checkboxgroup',
		    		fieldLabel	: '用户角色',
		            name		: 'roles',
		            columns		: 3,
					items		: response.roles
		        }]
			});
			win = new Ext.Window({
				title	: '新增帐号信息',
				iconCls	: 'icon-add',
				layout	: 'border',
				width	: 720,
				height	: 580,		
				items	: [formPanel, treePanel],
				closeAction : 'hide',
				bbar 	: {
					xtype		: 'toolbar',
					buttonAlign	: 'right',
					items		: [{
						text	: '保存', 
						iconCls	: 'icon-save', 
						url		: '/admin/user/dosave.html', 
						handler	: function(){
						if(!formPanel.getForm().isValid())
		        			return;
		        		access = treePanel.getChecked('id'); 
		        		access = access.join(',');
		        		formPanel.getForm().submit({
			        		waitMsg 	: '数据提交处理中...',
							waitTitle 	: '信息提示',
							params    	: {'access' : access},
			        		clientValidation: true,
			        		url			: '/admin/user/dosave.html',
				        	success		: function(form, action) {
				        		grid.store.reload();
				        		win.hide();
							},
							failure	: main.submitFailure
				    	});
					}}]
				}
			});
		}
		var id = Ext.isObject(user)? user.get('id'):0;
		win.setTitle((id > 0)? '编辑帐号信息':'新增帐号信息');
		win.setIconClass((id > 0)? 'icon-edit':'icon-add');
		win.show();
		if(id > 0) {
			user.set('avtar', '');
			formPanel.getForm().loadRecord(user);
			var node = {'id':user.get('orgid'), 'text':user.get('org')};
	    	formPanel.getForm().findField('orgid').setValue(node);
	    	setTimeout(function(){
	    		formPanel.getForm().findField('orgid').setRawValue(user.get('org'));
	    	},1000);
			Ext.Ajax.request({
	    		url: '/admin/user/doaccess.html',
	    		params:{'id':id},
	    		success: function(resp, req){
	    			var data = Ext.decode(resp.responseText);
	    			if(data.code == 0) {
	    				//处理用户组
	    				var roles = formPanel.getForm().findField('roles');
	    				for(var i=0; i < response.roles.length; i++) {
	    					if(data.roles.indexOf(""+response.roles[i].inputValue) >=0) {
	    						roles.setValue(response.roles[i].name, true);
	    					} else {
	    						roles.setValue(response.roles[i].name, false);
	    					}
	    				}
	    				//处理个性权限 延时装载
	    				setTimeout(function(){
	    					var root = treePanel.getRootNode();
	    					root.cascade(function(){
		    					if(data.access.indexOf(""+this.id) >= 0) {
		    						this.getUI().toggleCheck(true);
					        		this.attributes.checked=true;
		    					} else {
		    						this.getUI().toggleCheck(false);
					        		this.attributes.checked=false;
		    					}
	    					});
	    				}, 500);
	    			}
	    		},
   				failure: main.submitFailure
	    	});
		} else {
			formPanel.getForm().reset();
			access = treePanel.getChecked();
			for(var i=0, n=access.length; i < n; i++) {
				access[i].getUI().toggleCheck(false);
				access[i].attributes.checked = false;
			}
		}
	}
	store = new Ext.data.JsonStore({
	    autoDestroy	: true,
	    url			: '/admin/user/dolist.html',
	    remoteSort	: true,
	    sortInfo	: {
	            field		: 'id',
	            direction	: 'DESC'
		},
		baseParams	: {
			start	: 0,
			limit	: main.pageSize
		},
		autoLoad		: true,
	    root			: 'dataset',
	 	totalProperty	: 'total',
	    fields			: ['id', 'account', 'avtar', 'sex', 'nickname', 'email', 'mobile',
	    	'regtime', 'regip', 'status', 'orgid', 'expire', 'isdup', 'org', 'stime']
	});
	grid = {
		xtype		: 'grid',
		title		: response.title,
	    store		: store,
		region		: 'center', 
	    columns		: [
	        sm,
			{header: 'ID编号', width:70, sortable:true, dataIndex:'id'},
			{header: '用户名', width:100, sortable:true, dataIndex:'account'},
			{header: '真实姓名', width:100, sortable:true, dataIndex:'nickname'},
			{header: '公司部门', width:100, dataIndex:'org'},
			{header: '性别', width:70, dataIndex:'sex', sortable:true, renderer:function(v){
				return response.sex[v];
			}},
			{header: 'Email地址', width:120, dataIndex:'email'},
			{header: '手机号码',width:110, sortable:true, dataIndex:'mobile'},
			{header: '状态', width:70, dataIndex:'status', sortable:true, renderer:function(v){
				return response.status[v];
			}},
			{header: '注册时间',width:120, sortable:true, dataIndex:'regtime'},
			{header: '过期时间',width:100, sortable:true, dataIndex:'expire'},
			{header: '是否允许多端登录', width:100, sortable:true, dataIndex:'isdup', renderer:function(v){
				return response.isdup[v];
			}}
		],
	    viewConfig	: {
	        forceFit	 : true,
	        scrollOffset : 0
	    },
	    listeners 	:{'rowdblclick':function(grid, index, e){
	    	var user = grid.store.getAt(index).copy();
	    	userForm(user);
	    },'destroy':function(){
	    	win && win.close();
	    },'render':function(obj){
			main.gridRender(obj, ['avtar']);
    	}},
	    sm			: sm,
	    stripeRows	: true,
	    tbar		: [{
			text	: '刷新',
			iconCls	: 'icon-refresh',
			handler : function(){
				store.reload(); 
			}
		},'-',{
			text	: '新增用户',
			iconCls	: 'icon-add',
			url     : '/admin/user/dosave.html',
			handler : function(){
				userForm(0);
			}
		},'-','用户名:',{
			xtype       : 'textfield',
			id   		: sid.account,
			width	    : 80
		},'状态:',{
			xtype		: 'combo',
			store		: new Ext.data.ArrayStore({
		        fields: ['id','name'],
		        data: main.cv2Array(response.status)
		    }),
			displayField	: 'name',
			valueField		: 'id',
			mode			: 'local',
			triggerAction	: 'all',
			emptyText		: '请选择',
			width			: 80,
			id  			: sid.status
		},
		'过期时间:',{
			xtype       : 'datefield',
			id  		: sid.sdate,
			format      : 'Y-m-d',
			width	    : 100
		},'<->',{
			xtype       : 'datefield',
			id  		: sid.edate,
			format      : 'Y-m-d',
			width	    : 100
		},'所在部门:',{
            xtype		: 'combotree',
            id  		: sid.orgid,
            emptyText	: '请选择',
            tree		: new Ext.tree.TreePanel({  
        		useArrows		: true,
        		autoScroll		: true,
        		animate			: true,
        		containerScroll	: true,
        		border			: false,
        		rootVisible		: false,
        		loader 			: {
        			dataUrl		: '/admin/org/dotree.html'
        		},
        		root			: {
        			nodeType	: 'async'
        		}
        	}), 
    		listWidth	: 220,
        	width 		: 140
		},{
			text			: '检索',
			iconCls			: 'icon-search',
			handler: function() {
				store.baseParams.account= Ext.getCmp(sid.account).getValue();
				store.baseParams.status = Ext.getCmp(sid.status).getValue();
				store.baseParams.sdate  = Ext.getCmp(sid.sdate).getValue();
				store.baseParams.edate  = Ext.getCmp(sid.edate).getValue();
				store.baseParams.orgid  = Ext.getCmp(sid.orgid).getValue();
				store.reload(); 
			}
		}],
		bbar		: new Ext.PagingToolbar({
			pageSize	: main.pageSize,
			store		: store,
			displayInfo	: true
		})
	};
	return grid;
}();